<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>封装队列</title>
</head>

<body>
    <script>
        // 封装队列
        function Queue() {
            // 属性
            this.items = [];

            // 方法
            // 1.将元素加入队列中
            Queue.prototype.enqueue = function (element) {
                this.items.push(element);
            }

            // 2.从队列中删除前端元素
            Queue.prototype.dequeue = function () {
                return this.items.shift();
            }

            // 3.查看前端的元素
            Queue.prototype.front = function () {
                return this.items[0];
            }

            // 4.查看队列是否为空
            Queue.prototype.isEmpty = function () {
                return this.items.length == 0;
            }

            // 5.查看队列中元素的个数
            Queue.prototype.size = function () {
                return this.items.length;
            }

            // 6.toString方法
            Queue.prototype.toString = function () {
                var s = '';
                for (let i = 0; i < this.items.length; i++) {
                    s += this.items[i] + ' ';
                }
                return s;
            }

        }

        var queue = new Queue();

        // 将元素加入到队列中
        queue.enqueue('abc')
        queue.enqueue('bca')
        queue.enqueue('nab')
        queue.enqueue('mab')
        // console.log(queue)
        alert(queue)

        // 删除元素
        queue.dequeue()
        queue.dequeue()
        // console.log(queue)
        // alert(queue)

        // alert(queue.front())
        // alert(queue.isEmpty())
        alert(queue.size())

        // 面试题：击鼓传花
        function passGame(nameList, num) {
            // 1.创建一个队列
            var queue = new Queue();

            // 2.将所有人加入到队列中
            for (let i = 0; i < nameList.length; i++) {
                queue.enqueue(nameList[i]);
            }
            alert(queue.size())
            // 3.每个人开始数数，不是num时放回队列尾部，是num时删除
            while (queue.size() > 1) {
                for (let i = 0; i < num - 1; i++) {
                    queue.enqueue(queue.dequeue())
                }
                queue.dequeue()
            }

            alert(queue.size());
            var endName = queue.front();
            alert('最终剩下的人' + endName);

            return nameList.indexOf(endName) + 1;

        }

        names = ['Amy', 'Mike', 'Lucy', 'Tom', 'John']
        alert(passGame(names, 3));

    </script>
</body>

</html>